/**
 * Copyright(c) 2013 Jade Techonologies Co., Ltd.
 *
 * History:
 *   13-4-14 下午6:27 Created by dwzhang
 */
package com.jade.framework.base.util.encryption;

import com.jade.framework.base.util.UniqueID;
import org.apache.commons.codec.digest.Md5Crypt;
import org.apache.commons.lang3.StringUtils;

/**
 * CryptMD5方式的加密方法。
 *
 * @author dwzhang
 * @version 1.0 13-4-14 下午6:27
 */
public class CryptMD5Encryption implements Encryption
{
    /**
     * 加密
     *
     * @param password 密码明文
     * @return 加密后的密文
     */
    public synchronized String encrypt(String password)
    {
        String salt = UniqueID.nextCode(8, true);
        return Md5Crypt.md5Crypt(password.getBytes(), salt);
    }

    /**
     * 检查密码是否匹配
     *
     * @param password  需要检查的密码明文
     * @param encrypted 密码密文
     */
    public boolean check(String password, String encrypted)
    {
        int pos = encrypted.indexOf('$', 3);
        if (pos < 3) {
            return false;
        }
        String salt = encrypted.substring(3, pos);
        String encrypt = Md5Crypt.md5Crypt(password.getBytes(), salt);
        return StringUtils.equals(encrypt, encrypted);
    }
}
